Mise à jour le 03/03/2022
Remplacer l'extension PHP 5.3 mysql par mysqli

Remplacer l'extension PHP 5.3 mysql par mysqli


Cette page est une copie complète de cette page(https://www.linuxtricks.fr/wiki/php-passer-de-mysql-a-mysqli-requetes-de-base).

📖️️Source : https://www.linuxtricks.fr/wiki/php-passer-de-mysql-a-mysqli-requetes-de-base


1. Introduction

Depuis PHP 5.4, l'extension MySQL originale est obsolète, et génèrera des alertes de niveau E_DEPRECATED lors de la connexion à une base de données. A la place, on peut utiliser l'extension MySQLi ou l'extension PDO_MySQL.

Si comme moi, vous avez des sites avec l'extension MySQL, voici des petits exemples pour passer de MySQL à MySQLi (que je trouve plus simple d'emploi sur mes petites créations).

2. Connexion à la base

Auparavant, avec MySQL, se connecter à la base de données se faisait ainsi :

// on se connecte à MySQL
$conn = mysql_connect('$host', '$user', '$passwd');

// on sélectionne la base
mysql_select_db('mabase',$conn);


Maintenant, avec MySQLi, on utilise :

// on se connecte à MySQL et on sélectionne la base
$conn = mysqli_connect('$host', '$user', '$passwd', 'mabase');


3. Les requêtes

3.1 SELECT


Exemple de requête SELECT et affichage des résultats dans un tableau :

// On créé la requête
$req = "SELECT * FROM table1";

// on envoie la requête
$res = mysql_query($req);

// on va scanner tous les tuples un par un
echo "<table>";
while ($data = mysql_fetch_assoc($res)) {
    // on affiche les résultats
    echo "<tr><td>".$data['id']."</td><td>".$data['texte']."</td></tr>";
}
echo "</table>";


Maintenant, avec MySQLi, cela donne :

// On créé la requête
$req = "SELECT * FROM table1";

// on envoie la requête
$res = $conn->query($req);

// on va scanner tous les tuples un par un
echo "<table>";
while ($data = mysqli_fetch_array($res)) {
    // on affiche les résultats
    echo "<tr><td>".$data['id']."</td><td>".$data['texte']."</td></tr>";
}
echo "</table>";


3.2 INSERT / DELETE

Avec MySQL, on utilisait :

// On créé la requête
$req = "INSERT INTO table1(texte) VALUES ('Du texte')";

// on envoie la requête
$res = mysql_query($req);


Avec MySQLI, cet exemple devient :

// On créé la requête
$req = "INSERT INTO table1(texte) VALUES ('Du texte mysqli')";

// on envoie la requête
$res = $conn->query($req);


4. Fermer la connexion

Avec MySQL, clore la connexion à la base :

// on ferme la connexion
mysql_close();


Et bien, avec MySQLi, cela devient :

// on ferme la connexion
mysqli_close($conn);


5. Se protéger des injections SQL

// Se protéger des injections SQL
$username = $conn->real_escape_string($_GET['username']);
$conn->query("SELECT * FROM users WHERE username = '$username'");


6. Requête préparée

Voici un exemple de requête à trous, préparée utilisant l'extension MySQLi:

// mysqli, Requête préparée
$query = $conn->prepare('SELECT * FROM users WHERE username = ?');
$query->bind_param('s', $username); // s = string, i = integer
$query->execute();


7. Tester le nombre de lignes

// on crée la requête SQL
$req = "SELECT * FROM table1 WHERE chk_actif=1;";

// on envoie la requête
$res = $conn->query($req) or die();

// Si on a des lignes...
if ( $res->num_rows > 0 ) {
    echo "On a des résultats";
} else {
    echo "On n'a aucun résultat";
}